home *** CD-ROM | disk | FTP | other *** search
/ Linux Cubed Series 8: LINUX Games / Linux Cubed Series 8 - LINUX Games.iso / games / x11 / strategy / xvmahjon.por / xvmahjon / xvmahjongg / mahjongg.h < prev    next >
Text File  |  1991-12-22  |  8KB  |  317 lines

  1. /*
  2.  * XView port of mahjongg by Stan K. Tazuma, 8/91-9/91
  3.  * Copyright 1991.
  4.  *
  5.  * $Header: /home/sirius/skt/cmds/src/sun/mj/RCS/mahjongg.h,v 2.4 91/12/22 17:12:52 skt Exp $
  6.  *
  7.  */
  8.  
  9. /*
  10.  *    Copyright 1988, Mark Holm
  11.  *            Exceptions
  12.  *
  13.  *    Acknowledgments to Dorothy Robinson for her artistic
  14.  *     abilities in drawing the icons and to Jim Batch for
  15.  *     technical support and graphical concepts (which I abandoned in favor
  16.  *       of the easy way out).
  17.  *
  18.  *    Permission is given to copy and distribute for non-profit purposes.
  19.  *
  20.  */
  21.  
  22. #define RANDOM(x)    ((random() >> 8) % x)
  23.  
  24. typedef unsigned char boolean;
  25. #define TRUE        1
  26. #define FALSE        0
  27.  
  28. /* extra window definitions */
  29. #define BORDER        2    /* border width between panel and canvas */
  30.             /* weird behavior when BORDER set to 1 : the
  31.              * width of the canvas window gets reduced (usually
  32.              * but not always--each invocation different)
  33.              * by about 1/3rd.  Don't know why. */
  34.  
  35. /* define tile playing area offsets from frame edges */
  36. #define X_LOC 30
  37. #define Y_LOC 40
  38.  
  39. #define W_BASE_TILE     58
  40. #define H_BASE_TILE     59
  41. #define S_TILE_SHADOW    6
  42. #define B_TILE_SHADOW    5
  43. #define WIDE_MAX_TILES  15
  44. #define HIGH_MAX_TILES  8
  45. #define PLAY_X_MAX    ((W_BASE_TILE * WIDE_MAX_TILES) + S_TILE_SHADOW + (2 * X_LOC))
  46. #define PLAY_Y_MAX    ((H_BASE_TILE * HIGH_MAX_TILES)  + B_TILE_SHADOW + (2 * Y_LOC))
  47. #define MESS_X_MAX    (PLAY_X_MAX)
  48. #define MESS_Y_MAX    (H_BASE_TILE * 3)
  49. #define FRAME_X_MAX    (PLAY_X_MAX )
  50. #define FRAME_Y_MAX    (PLAY_Y_MAX + MESS_Y_MAX + BORDER)
  51.  
  52. /* define rows and cols */
  53.  
  54. #define ROW1    (Y_LOC)
  55. #define ROW2    (Y_LOC + H_BASE_TILE)
  56. #define ROW3    (Y_LOC + (H_BASE_TILE * 2))
  57. #define ROW4    (Y_LOC + (H_BASE_TILE * 3))
  58. #define ROW4pt5    (Y_LOC + (H_BASE_TILE * 3) + (H_BASE_TILE / 2))
  59. #define ROW5    (Y_LOC + (H_BASE_TILE * 4))
  60. #define ROW6    (Y_LOC + (H_BASE_TILE * 5))
  61. #define ROW7    (Y_LOC + (H_BASE_TILE * 6))
  62. #define ROW8    (Y_LOC + (H_BASE_TILE * 7))
  63.  
  64. #define COL1    (X_LOC)
  65. #define COL2    (X_LOC + W_BASE_TILE)
  66. #define COL3    (X_LOC + (W_BASE_TILE * 2))
  67. #define COL4    (X_LOC + (W_BASE_TILE * 3))
  68. #define COL5    (X_LOC + (W_BASE_TILE * 4))
  69. #define COL6    (X_LOC + (W_BASE_TILE * 5))
  70. #define COL7    (X_LOC + (W_BASE_TILE * 6))
  71. #define COL7pt5    (X_LOC + (W_BASE_TILE * 6) + (W_BASE_TILE / 2))
  72. #define COL8    (X_LOC + (W_BASE_TILE * 7))
  73. #define COL9    (X_LOC + (W_BASE_TILE * 8))
  74. #define COL10    (X_LOC + (W_BASE_TILE * 9))
  75. #define COL11    (X_LOC + (W_BASE_TILE * 10))
  76. #define COL12    (X_LOC + (W_BASE_TILE * 11))
  77. #define COL13    (X_LOC + (W_BASE_TILE * 12))
  78. #define COL14    (X_LOC + (W_BASE_TILE * 13))
  79. #define COL15    (X_LOC + (W_BASE_TILE * 14))
  80.  
  81.  
  82. /* Tile structure */
  83.  
  84. typedef unsigned char Tile_val;
  85. /* DONT_CARE is a value assigned to a Tile_val variable that is a non-valid
  86.  * tile identifier */
  87. #define DONT_CARE    255
  88.  
  89. typedef struct tile {
  90.     char    image;        /* numeric index of image into the array of
  91.                  * images */
  92.  
  93.     short    x_loc;        /* X coord of upper left corner */
  94.     short    y_loc;        /* Y coord of upper left corner */
  95.     Tile_val    value;        /* numeric id of tile */
  96.     boolean    left_free;    /* is left side of tile free? */
  97.     boolean    right_free;    /* is right side of tile free? */
  98.     boolean    top_free;    /* is top side of tile free? */
  99.     Tile_val    left_next[2];    /* if !left_free, there are 1 or 2 tiles
  100.                  * to the left of the tile, with their id's
  101.                  * listed here */
  102.     Tile_val    right_next[2];    /* if !right_free, there are 1 or 2 tiles
  103.                  * to the right of the tile, with their id's
  104.                  * listed here */
  105.     Tile_val    covered[4];    /* if !top_free, there are 1 or 4 tiles
  106.                  * below the tile, id's are listed here */
  107.     boolean    removed;    /* is tile removed from play area? */
  108.     boolean    image_fixed;    /* was the tile image fixed up to clean up the
  109.                  * junk? */
  110.     boolean    top_covered;    /* in a visual sense, is the tile completely
  111.                  * (not just partially) covered by another
  112.                  * tile? (some tiles have tiles above them
  113.                  * that completely obscure and hide the tile;
  114.                  * other tiles are only partially obscured) */
  115. } Tile;
  116.  
  117. typedef struct sel { 
  118.     boolean    in_preview_mode;    /* is selected tile
  119.                      * visually inverted? */
  120.     Tile    *tileptr;        /* ptr to a Tile, so we can use its
  121.                      * Pixrect and x_loc, y_loc location */
  122.     Server_image si_before_preview;    /* before doing a preview (inverting)
  123.                      * save the pixrect here so that if
  124.                      * a cancel preview is done, the
  125.                      * cancel can be quick */
  126. } Selected;
  127.  
  128. /*
  129.  * The next few macros are used to extract from Pixrect's the pointers
  130.  * to actual image data, so that I can use or modify the data.
  131.  * mpr_d() comes from <pixrect/memvar.h>.  Each of the macros takes
  132.  * a pointer to a memory pixrect as the parameter.
  133.  */
  134. #define PIXRECT_IMAGE_DATA_PTR(mpr)    (mpr_d(mpr)->md_image)
  135. #define PIXRECT_IMAGE_DEPTH(mpr)    ((mpr)->pr_depth)
  136. /* PIXRECT_IMAGE_SIZE() gets the image size in numbers of bytes */
  137. #define PIXRECT_IMAGE_SIZE(mpr)        \
  138.     ((((mpr)->pr_width * (mpr)->pr_height) * PIXRECT_IMAGE_DEPTH(mpr))/8)
  139.  
  140.  
  141. /* global externals */
  142.  
  143. /* color closed icon image */
  144.  
  145. extern Pixrect        cicon_image;
  146.  
  147. /* black and white closed icon image */
  148. extern Pixrect        icon_image_pr;
  149.  
  150. /* black and white number tiles */
  151.  
  152. extern Pixrect        NUM0;
  153. extern Pixrect        NUM1;
  154. extern Pixrect        NUM2;
  155. extern Pixrect        NUM3;
  156. extern Pixrect        NUM4;
  157. extern Pixrect        NUM5;
  158. extern Pixrect        NUM6;
  159. extern Pixrect        NUM7;
  160. extern Pixrect        NUM8;
  161. extern Pixrect        NUM9;
  162.  
  163. /* color number tiles */
  164.  
  165. extern Pixrect        cNUM0;
  166. extern Pixrect        cNUM1;
  167. extern Pixrect        cNUM2;
  168. extern Pixrect        cNUM3;
  169. extern Pixrect        cNUM4;
  170. extern Pixrect        cNUM5;
  171. extern Pixrect        cNUM6;
  172. extern Pixrect        cNUM7;
  173. extern Pixrect        cNUM8;
  174. extern Pixrect        cNUM9;
  175.  
  176. /* black and white playing tiles */
  177.  
  178. extern Pixrect        BLANK;
  179. extern Pixrect        DOT1;
  180. extern Pixrect        DOT2;
  181. extern Pixrect        DOT3;
  182. extern Pixrect        DOT4;
  183. extern Pixrect        DOT5;
  184. extern Pixrect        DOT6;
  185. extern Pixrect        DOT7;
  186. extern Pixrect        DOT8;
  187. extern Pixrect        DOT9;
  188. extern Pixrect        BAM1;
  189. extern Pixrect        BAM2;
  190. extern Pixrect        BAM3;
  191. extern Pixrect        BAM4;
  192. extern Pixrect        BAM5;
  193. extern Pixrect        BAM6;
  194. extern Pixrect        BAM7;
  195. extern Pixrect        BAM8;
  196. extern Pixrect        BAM9;
  197. extern Pixrect        CHA1;
  198. extern Pixrect        CHA2;
  199. extern Pixrect        CHA3;
  200. extern Pixrect        CHA4;
  201. extern Pixrect        CHA5;
  202. extern Pixrect        CHA6;
  203. extern Pixrect        CHA7;
  204. extern Pixrect        CHA8;
  205. extern Pixrect        CHA9;
  206. extern Pixrect        GRED;
  207. extern Pixrect        REDD;
  208. extern Pixrect        WHTD;
  209. extern Pixrect        EAST;
  210. extern Pixrect        WEST;
  211. extern Pixrect        SOUT;
  212. extern Pixrect        NORT;
  213. extern Pixrect        AUT;
  214. extern Pixrect        SUM;
  215. extern Pixrect        SPR;
  216. extern Pixrect        WIN;
  217. extern Pixrect        ORC;
  218. extern Pixrect        MUM;
  219. extern Pixrect        BAM;
  220. extern Pixrect        PLM;
  221.  
  222. /* color playing tiles */
  223.  
  224. extern Pixrect        cBLANK;
  225. extern Pixrect        cDOT1;
  226. extern Pixrect        cDOT2;
  227. extern Pixrect        cDOT3;
  228. extern Pixrect        cDOT4;
  229. extern Pixrect        cDOT5;
  230. extern Pixrect        cDOT6;
  231. extern Pixrect        cDOT7;
  232. extern Pixrect        cDOT8;
  233. extern Pixrect        cDOT9;
  234. extern Pixrect        cBAM1;
  235. extern Pixrect        cBAM2;
  236. extern Pixrect        cBAM3;
  237. extern Pixrect        cBAM4;
  238. extern Pixrect        cBAM5;
  239. extern Pixrect        cBAM6;
  240. extern Pixrect        cBAM7;
  241. extern Pixrect        cBAM8;
  242. extern Pixrect        cBAM9;
  243. extern Pixrect        cCHA1;
  244. extern Pixrect        cCHA2;
  245. extern Pixrect        cCHA3;
  246. extern Pixrect        cCHA4;
  247. extern Pixrect        cCHA5;
  248. extern Pixrect        cCHA6;
  249. extern Pixrect        cCHA7;
  250. extern Pixrect        cCHA8;
  251. extern Pixrect        cCHA9;
  252. extern Pixrect        cGRED;
  253. extern Pixrect        cREDD;
  254. extern Pixrect        cWHTD;
  255. extern Pixrect        cEAST;
  256. extern Pixrect        cWEST;
  257. extern Pixrect        cSOUT;
  258. extern Pixrect        cNORT;
  259. extern Pixrect        cAUT;
  260. extern Pixrect        cSUM;
  261. extern Pixrect        cSPR;
  262. extern Pixrect        cWIN;
  263. extern Pixrect        cORC;
  264. extern Pixrect        cMUM;
  265. extern Pixrect        cBAM;
  266. extern Pixrect        cPLM;
  267.  
  268. /*
  269.  * Indexes into Tile_icon_mpr[] and Tile_icon_si[].  These defines map
  270.  * directly to the case labels used in the original switch statement
  271.  * in mahjongg.c
  272.  */
  273. #define DOT1_I    0
  274. #define DOT2_I    1
  275. #define DOT3_I    2
  276. #define DOT4_I    3
  277. #define DOT5_I    4
  278. #define DOT6_I    5
  279. #define DOT7_I    6
  280. #define DOT8_I    7
  281. #define DOT9_I    8
  282. #define BAM1_I    9
  283. #define BAM2_I    10
  284. #define BAM3_I    11
  285. #define BAM4_I    12
  286. #define BAM5_I    13
  287. #define BAM6_I    14
  288. #define BAM7_I    15
  289. #define BAM8_I    16
  290. #define BAM9_I    17
  291. #define CHA1_I    18
  292. #define CHA2_I    19
  293. #define CHA3_I    20
  294. #define CHA4_I    21
  295. #define CHA5_I    22
  296. #define CHA6_I    23
  297. #define CHA7_I    24
  298. #define CHA8_I    25
  299. #define CHA9_I    26
  300. #define GRED_I    27
  301. #define REDD_I    28
  302. #define WHTD_I    29
  303. #define EAST_I    30
  304. #define WEST_I    31
  305. #define SOUT_I    32
  306. #define NORT_I    33
  307. #define AUT_I    34
  308. #define SUM_I    35
  309. #define SPR_I    36
  310. #define WIN_I    37
  311. #define ORC_I    38
  312. #define MUM_I    39
  313. #define BAM_I    40
  314. #define PLM_I    41
  315.  
  316. #define BLANK_I    42
  317.